﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sistema.Modelo;
using Sistema.Dao;
using System.Data.SqlClient;
using Sistema.Visao.Pessoa.Bairro;
using Sistema.Visao.Pessoa.Endereço;

namespace Sistema.Visao.Pessoa.Cidade
{//abre o namespace
    public partial class formCidade : Form
    {//abre o form
        //variaveis globais
        CidadeMod mod = new CidadeMod();// variavel da classe modelo
        CidadeDao dao = new CidadeDao();// variavel da classe dao
        CidadeDao dao2 = new CidadeDao();// variavel da classe dao
        string cidade, ibge;
        dataBairro form;
        dataEndereco formEnd;
        Boolean tabelaVazia, cidadeop, tipo;//opcão de cadastro e alteração
        int codEstado, ultimocodigo, linha, codigo, op = 1;



        //contrutor principal
        public formCidade()
        {
            InitializeComponent();
        }

        //contrutor form cidade lincado com databairro
        public formCidade(dataBairro cidade, int opcao)
        {
            InitializeComponent();
            form = cidade;
            op = opcao;
            cidadeop = false;
        }
        //contrutor form cidade lincado com dataendereço
        public formCidade(dataEndereco endereco, int opcao)
        {
            InitializeComponent();
            formEnd = endereco;
            op = opcao;
            cidadeop = true;
        }

       
   
        

        /*como as cidades ja estão cadastradas, se acaso o usuário quiser cadastrar um novo usuário esta classe recebe o ultimo
         código da ultima cidade cadastrada e pega este valor para servir de base para um novo cadastro*/
        public void pegaUltimoCodigo()
        {//abre o pegaultimocodigo

            dao2.SelecionarCidade("", 4);//consulta confere qual o ultimo código cadastrado no banco
            SqlDataAdapter i = dao2.getSelect();
            DataTable da = new DataTable();
            i.Fill(da);
            //pega o ultimo codigo e manda para combobox
            cbCodigo.DataSource = da;
            cbCodigo.DisplayMember = "Cidade_Codigo";
            cbCodigo.ValueMember = "Cidade_Codigo";
            ultimocodigo = Convert.ToInt32(cbCodigo.Text);//manda o valor do último código para a variavel ultimocodigo

       }//fecha o pegaultimocodigo


        public void pegadados()
        {//pega os dados do grid

            if (dgCidades.RowCount == 0)//confere se o grid esta vazio
            {//abre o if
                ultimocodigo = 1;
                tabelaVazia = true;
                //se a tabela estiver vazia exibir label com msg e desabilitar botoes
                cbTipoPesquisa.Enabled = false;
                tbCampoPesquisar.Enabled = false;
                btPesquisar.Enabled = false;
                btAdicionar.Enabled = false;
                lbMsg.Visible = true;
                dgCidades.Visible = false;
            }//fecha o if
            else
            {//abre o else
                //se nao pega dados da tabela e habilita botoes
                cbTipoPesquisa.Enabled = true;
                tbCampoPesquisar.Enabled = true;
                btPesquisar.Enabled = true;
                btAdicionar.Enabled = true;
                dgCidades.Visible = true;
                lbMsg.Visible = false;
                //pega valores da grid
                linha = dgCidades.CurrentRow.Index;//linha pega posição da linha selecionada na grid
                cidade = dgCidades.Rows[linha].Cells[2].Value.ToString();
                codigo = Convert.ToInt16(dgCidades.Rows[linha].Cells[0].Value.ToString());//pegando codigo para realizara alteraçao
                ibge = dgCidades.Rows[linha].Cells[3].Value.ToString();
                codEstado = Convert.ToInt16(dgCidades.Rows[linha].Cells[1].Value.ToString());
            }//fecha o else
        }//fecha o pegadados
            
            
        public void AtualizarGrid(int Selecao, String Busca)//MEtodo para carregar o data Grid atraves de coneção com o banco utilizando a camada dao
        {//abre atualiza grid
            dao.SelecionarCidade(Busca, Selecao);
            SqlDataAdapter i = dao.getSelect();
            DataTable da = new DataTable();
            i.Fill(da);
            dgCidades.DataSource = da;

            //altera o nome dos campos da coluna
            dgCidades.Columns[0].HeaderText = "Código";
            dgCidades.Columns[2].HeaderText = "Cidade";
            dgCidades.Columns[3].HeaderText = "Código do IBGE";
            //define o tamanho das colunas do grid
            dgCidades.Columns[0].Width = 50;
            dgCidades.Columns[2].Width = 250;
            dgCidades.Columns[3].Width = 150;
            //colocando os valores da coluna data_de_cadastro invisivel no grid
            dgCidades.Columns[1].Visible = false;
            dgCidades.Columns[4].Visible = false;
        }//Fecha chave AtualizaGrid

        private void toolStripButton1_Click(object sender, EventArgs e)
        {//abre o botao novo
            if (tabelaVazia != true)//compara se a tabela estiver vazia ele pula fora do if
            {//abre o if 
                pegaUltimoCodigo();// pega o ultimo codigo cadastrado da cidade
            }//fecha o if
            
            tipo = true;//passa true para simbolizar que é um cadastro
            dataCidade vai = new dataCidade(this, tipo,ultimocodigo,tabelaVazia);//passas valores para cadastro
            vai.ShowDialog();
        }//fecha o botao novo

        private void formCidade_Load(object sender, EventArgs e)
        {//abre o load
            if (op == 1) //se a opção for igual a 1 ele vai carregar os dados no grid e não vai carregar o botão adicionar
            {//abri if
                AtualizarGrid(0, "");
                pegadados();
                cbTipoPesquisa.SelectedIndex = 0;
                btAdicionar.Visible = false;
            }//fecha o if 
            else
            {//abre o else
                AtualizarGrid(0, "");
                pegadados();
                cbTipoPesquisa.SelectedIndex = 0;
                btAdicionar.Visible = true;
            }//fecha o else
        }//fecha o load

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            tipo = false;//opção de alteração
            dataCidade vai = new dataCidade(this, cidade, tipo, codigo, ibge, codEstado);//chama o form e passa valores para alteração
            vai.ShowDialog();
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            pegadados();//quando clicar na célula pegar os dados
        }

        private void button2_Click(object sender, EventArgs e)
        {//abre o button
            if (cidadeop == true)//passar valores para o endereço
            {//abre o if
                //passa os valores para o endereço
                formEnd.cbCidade.Text = cidade;
                formEnd.tbCidade.Text = cidade;
                formEnd.cbCodigoCidade.Text = Convert.ToString(codigo);
                this.Hide();
            }//fecha o if
            else
            {//abre o else
                //passa os valores para a Bairro
                form.cbCidade.Text = cidade;
                form.cbcodigoCidade.Text = Convert.ToString(codigo);
                form.tbCidade.Text = cidade;
                this.Hide();
            }//fecha o else
            }//fecha o button

        private void button3_Click(object sender, EventArgs e)
        {//abre o button
            this.Hide();//fecha o form
        }//fecha o button

        private void button1_Click(object sender, EventArgs e)
        {//abre o button1
            if (cbTipoPesquisa.SelectedIndex == 0)//Que contenha
            {//abre o if
                //chama o metodo para atualizar o grid passando como parametro o tipo da pesquisa e o valor da pesquisa
                AtualizarGrid(1, tbCampoPesquisar.Text);
            }//fecha o if
            else if (cbTipoPesquisa.SelectedIndex == 1)//Que inicie com
            {//abre o else if
                //chama o metodo para atualizar o grid passando como parametro o tipo da pesquisa e o valor da pesquisa
                AtualizarGrid(2, tbCampoPesquisar.Text);
            }//fecha o else if
            else if (cbTipoPesquisa.SelectedIndex == 2)//Que seja igual a
            {//abre o else if2
                //chama o metodo para atualizar o grid passando como parametro o tipo da pesquisa e o valor da pesquisa
                AtualizarGrid(3, tbCampoPesquisar.Text);
            }//fecha o else if2
        }//fecha o button1
    }//fecha o form
}//fecha o namespace
